#include <iostream>
#include <string>

using namespace std;

class VGA
{
public:
    virtual void play() = 0;
};
class TV01:public VGA
{
public:
    void play() { cout << "通过VGA接口连接投影仪，进行视频播放！" << endl; }
};

class HDMI
{
public:
    virtual void play() = 0;
};
class TV02 : public HDMI
{
public:
    void play() { cout << "通过HDMI接口连接投影仪，进行视频播放！" << endl; }
};

// 一定要继承原来的类
class VGA2HDMIAdapter:public VGA
{
public:
    VGA2HDMIAdapter(HDMI* p):phdmi(p){}
    void play() { phdmi->play(); }

private:
    HDMI *phdmi;
};
class Computer
{
public:
    // 由于电脑只支持VGA接口，所以该方法的参数也只支持VGA接口的指针/引用
    void playVideo(VGA *pVGA) { pVGA->play(); }
};

int main()
{
    // HDMI和VGA无法进行互相转化，电脑如何使用HDMI的play方法？
    /*
    1、换一个支持HDMI的电脑，也就是对Computer类进行重构，叫做代码重构。
    2、使用一个适配器（转化头），把VGA类转化为HDMI类，叫做添加适配器类。
    */

    Computer computer;
    computer.playVideo(new TV01());
    computer.playVideo(new VGA2HDMIAdapter(new TV02()));

    return 0;
}